/*!
 * \file DataDefineAD.h
 * \project WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WonderTrader高级数据存储系统数据结构定义文件
 * 
 * \details 该文件定义了WonderTrader高级数据存储系统中使用的所有核心数据结构，包括：
 *          - 数据块类型和版本定义
 *          - 数据块头部结构体定义
 *          - 实时Tick数据缓存结构
 *          - 实时K线数据缓存结构
 *          - 内存对齐和打包指令
 *          - 高级数据存储特有的数据格式
 *          
 *          该模块为WtDataStorageAD高级存储系统提供基础数据结构支持，
 *          与标准WtDataStorage模块的区别在于提供更高级的缓存和存储功能。
 */

#pragma once
#include "../Includes/WTSStruct.h"

USING_NS_WTP;

#pragma pack(push, 1)  ///< 设置结构体1字节对齐，确保数据存储格式一致性

const char BLK_FLAG[] = "&^%$#@!\0";	///< 数据块标识符，用于验证数据块完整性

const int FLAG_SIZE = 8;				///< 标识符大小

/*!
 * \enum tagBlockType
 * \brief 数据块类型枚举
 * 
 * 定义高级数据存储系统中支持的数据块类型
 */
typedef enum tagBlockType
{
	BT_RT_Cache			= 4		///< 实时数据缓存块类型
} BlockType;

#define BLOCK_VERSION_RAW	1	///< 原始数据版本号，用于版本兼容性管理

/*!
 * \struct _BlockHeader
 * \brief 数据块头部结构体
 * 
 * \details 所有数据块的基础头部结构，包含：
 *          - 数据块标识符：用于验证数据完整性
 *          - 数据块类型：标识数据块的具体类型
 *          - 版本号：用于数据格式的向后兼容
 */
typedef struct _BlockHeader
{
	char		_blk_flag[FLAG_SIZE];	///< 数据块标识符
	uint16_t	_type;					///< 数据块类型
	uint16_t	_version;				///< 版本号
} BlockHeader;

#define BLOCK_HEADER_SIZE	sizeof(BlockHeader)	///< 数据块头部大小宏定义

/*!
 * \struct _RTBlockHeader
 * \brief 实时数据块头部结构体
 * 
 * \details 继承自BlockHeader，添加了实时数据特有的信息：
 *          - 当前数据大小：已存储的数据项数量
 *          - 容量：数据块可容纳的最大数据项数量
 */
typedef struct _RTBlockHeader : BlockHeader
{
	uint32_t _size;			///< 当前数据项数量
	uint32_t _capacity;		///< 数据块容量
} RTBlockHeader;

/*!
 * \struct _TickCacheItem
 * \brief Tick数据缓存项结构体
 * 
 * \details 缓存单个Tick数据的结构，包含：
 *          - 日期：交易日期
 *          - Tick数据：完整的Tick结构体
 */
typedef struct _TickCacheItem
{
	uint32_t		_date;	///< 交易日期（YYYYMMDD格式）
	WTSTickStruct	_tick;	///< Tick数据结构体
} TickCacheItem;

/*!
 * \struct _RTTickCache
 * \brief 实时Tick数据缓存结构体
 * 
 * \details 用于缓存实时Tick数据的数据块结构，继承自RTBlockHeader，
 *          提供动态大小的Tick数据项数组。该结构支持高效的实时数据
 *          读写操作和内存管理。
 */
typedef struct _RTTickCache : RTBlockHeader
{
	TickCacheItem	_items[0];	///< 动态大小的Tick缓存项数组
} RTTickCache;

/*!
 * \struct _BarCacheItem
 * \brief K线数据缓存项结构体
 * 
 * \details 缓存单个K线数据的结构，包含：
 *          - 交易所代码：标识数据来源交易所
 *          - 合约代码：标识具体合约
 *          - K线数据：完整的K线结构体
 */
typedef struct _BarCacheItem
{
	char			_exchg[16];	///< 交易所代码（如SSE、SZSE等）
	char			_code[32];	///< 合约代码
	WTSBarStruct	_bar;		///< K线数据结构体
} BarCacheItem;

/*!
 * \struct _RTBarCache
 * \brief 实时K线数据缓存结构体
 * 
 * \details 用于缓存实时K线数据的数据块结构，继承自RTBlockHeader，
 *          提供动态大小的K线数据项数组。该结构支持多合约、多周期
 *          的K线数据高效缓存和检索。
 */
typedef struct _RTBarCache : RTBlockHeader
{
	BarCacheItem	_items[0];	///< 动态大小的K线缓存项数组
} RTBarCache;

#pragma pack(pop)  ///< 恢复默认结构体对齐方式
